/******************************************************************************************
 *****                              File Description Table                              ***
 ******************************************************************************************
 *                                                                                        *
 *               File Name          :   SequenceListTest.c                             *
 *                                                                                        *
 *               Author             :   cxm                                               *
 *                                                                                        *
 *               Creation Date      :   2025/03/18                                        *
 *                                                                                        *
 *               Last Modifief Date :   2025/03/18                                        *
 *                                                                                        *
 *----------------------------------------------------------------------------------------*
 * Description: 
 * 1. 顺序表测试  
 *========================================================================================*/   

/******************************************************************************************
*                                 头 文 件 引 用                             
*========================================================================================*/
#include "SequenceList\SequenceList.h"       
#include "SequenceList\SequenceListTest.h"
#include "sys_type_define.h"     
#include "sys_config_define.h"     

#include <stdlib.h>
                                                       
/******************************************************************************************
*                                 对 外 函 数 接 口 声 明                         
*========================================================================================*/
void SqList_TestTask(void);                                                                  
                                                       
/******************************************************************************************
*                                 内 部 函 数 接 口 声 明                      
*========================================================================================*/
static void SqList_AddTest(void);     
static void SqList_InsertTest(void);   
static void SqList_DeleteTest(void);        
static void SqList_SearchByIdxTest(void);     
static void SqList_SearchByValTest(void);  
static void SqList_SearchMaxValTest(void);  
static void SqList_SearchMinValTest(void);   
static void SqList_MergeTest(void);  
static void SqList_CleanTest(void);  
static void SqList_BubbleSortTest(void);                                                     
                                                       
/******************************************************************************************
*                                 对 外 函 数 接 口 实 现                          
*========================================================================================*/
/** 
 * @brief: 顺序表测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
void SqList_TestTask(void)
{
    if(FALSE == SqList_Init(&gst_sqlist1, 5) || FALSE == SqList_Init(&gst_sqlist2, 4))
    {
        SYS_LOG_DEBG("顺序表初始化成功");
    }

    /* Sqlist_Add 测试 */
    SqList_AddTest();

    /* SqList_Insert 测试 */

    /* SqList_SearchByIdx 测试 */

    /* SqList_SearchByVal 测试 */

    /* SqList_SearchMaxVal 测试 */

    /* SqList_SearchMinVal 测试 */

    /* SqList_Merge 测试 */

    /* SqList_Clean 测试 */

    /* SqList_DeInit 测试 */
}                                                                   
                                                       
/******************************************************************************************
*                                 内 部 函 数 接 口 实 现                    
*========================================================================================*/

/** 
 * @brief: Add 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_AddTest(void)
{
    for(int i = 0; i < gst_sqlist1.ush_MaxLen; i++)
    {
        if(Sqlist_Add(&gst_sqlist1, rand() & 0xFFFF))
        {
            SYS_LOG_DEBG("添加数值失败");
        }
    }

    for(int i = 0; i < gst_sqlist2.ush_MaxLen; i++)
    {
        if(Sqlist_Add(&gst_sqlist2, rand() & 0xFFFF))
        {
            SYS_LOG_DEBG("添加数值失败");
        }
    }

    SYS_LOG_DEBG("添加数值成功");
    SqList_Print(&gst_sqlist1);
    SqList_Print(&gst_sqlist2);
}

/** 
 * @brief: Insert 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */    
static void SqList_InsertTest(void)
{
    if(SqList_Insert(&gst_sqlist1, 2, 11) == FALSE 
        || SqList_Insert(&gst_sqlist2, 3, 22) == FALSE)
    {
        SYS_LOG_DEBG("顺序表 Insert 失败");
    }

    SqList_Print(&gst_sqlist1);
    SqList_Print(&gst_sqlist2);
}

/** 
 * @brief: Delete 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_DeleteTest(void)
{
    INT16S sh_Val1 = 0;
    INT16S sh_Val2 = 0;
    if( FALSE == SqList_Delete(&gst_sqlist1, 0, &sh_Val1) )
    {
        SYS_LOG_DEBG("顺序表1 Delete 失败");
    }
    else
    {
        SYS_LOG_DEBG("删除的值为[%d]", sh_Val1);
    }

    if( FALSE == SqList_Delete(&gst_sqlist2, 10000, &sh_Val2) )
    {
        SYS_LOG_DEBG("顺序表2 Delete 失败");
    }
    else
    {
        SYS_LOG_DEBG("删除的值为[%d]", sh_Val2);
    }

}     

/** 
 * @brief: SearchByIdx 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_SearchByIdxTest(void)
{
    INT16S sh_Val1 = 0;
    INT16S sh_Val2 = 0;
    if( FALSE == SqList_Delete(&gst_sqlist1, 0, &sh_Val1) )
    {
        SYS_LOG_DEBG("顺序表1 Delete 失败");
    }
    else
    {
        SYS_LOG_DEBG("删除的值为[%d]", sh_Val1);
    }

    if( FALSE == SqList_Delete(&gst_sqlist2, 10000, &sh_Val2) )
    {
        SYS_LOG_DEBG("顺序表2 Delete 失败");
    }
    else
    {
        SYS_LOG_DEBG("删除的值为[%d]", sh_Val2);
    }
}  

/** 
 * @brief: SearchByVal 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_SearchByValTest(void)
{

}  

/** 
 * @brief: SearchMaxVal 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_SearchMaxValTest(void)
{

}  

/** 
 * @brief: SearchMinVal 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_SearchMinValTest(void)
{

}  

/** 
 * @brief: Merge 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_MergeTest(void)
{
    SqList st_list = {0};


} 

/** 
 * @brief: Clean 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_CleanTest(void)
{
    if(SqList_Clean(&gst_sqlist1) == FALSE || SqList_Clean(&gst_sqlist2) == FALSE)
    {
        SYS_LOG_DEBG("清空顺序表失败");
    }
} 

/** 
 * @brief: BubbleSort 测试
 * 
 * @param: 
 *      [in] None
 * 
 * @return: 
 *      [out] None
 */
static void SqList_BubbleSortTest(void)
{
    if(SqList_BubbleSort(&gst_sqlist1) == FALSE || SqList_BubbleSort(&gst_sqlist2) == FALSE)
    {
        SYS_LOG_DEBG("冒泡排序失败");
    }
}  
